﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;
using DTO;

namespace DAO
{
    public class NguoiDungDAO
    {
        public static List<NguoiDungDTO> LayDanhSach()
        {
            OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi();
            string cmdText = "Select * from Nguoi_Dung";
            OleDbCommand cmd = new OleDbCommand(cmdText, cnn);
            cnn.Open();
            List<NguoiDungDTO> lstNguoiDungDto = null;
            try
            {
                lstNguoiDungDto = new List<NguoiDungDTO>();
                OleDbDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    NguoiDungDTO nguoiDungDto = new NguoiDungDTO();
                    nguoiDungDto.TenNguoiDung = (string)reader["TenNguoiDung"];
                    nguoiDungDto.MatKhau = (string)reader["MatKhau"];
                    nguoiDungDto.LaNguoiQuanLy = (bool)reader["LaNguoiQuanLy"];
                    lstNguoiDungDto.Add(nguoiDungDto);
                }
                cnn.Close();
                
            }
            catch
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
                throw new Exception("thao tác lấy danh sách người dùng bị lỗi");
            }
            finally
            {
                cnn.Dispose();
            }
            return lstNguoiDungDto;
        }

        public static NguoiDungDTO LayNguoiDung(string tenNguoiDung)
        {
            
            OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi();
            string cmdText = String.Format("Select * from Nguoi_Dung Where TenNguoiDung = '{0}'", tenNguoiDung);
            OleDbCommand cmd = new OleDbCommand(cmdText, cnn);
            cnn.Open();
            NguoiDungDTO nguoiDungDto = null;
            try
            {
                nguoiDungDto = new NguoiDungDTO();
                OleDbDataReader reader = cmd.ExecuteReader();
                if(reader.Read())
                {
                    nguoiDungDto.TenNguoiDung = tenNguoiDung;
                    nguoiDungDto.MatKhau = (string)reader["MatKhau"];
                    nguoiDungDto.LaNguoiQuanLy = (bool)reader["LaNguoiQuanLy"];
                }
                cnn.Close();
                
            }
            catch
            {
            	if(cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
                throw new Exception("thao tác lấy một người dùng bị lỗi");
            }
            finally
            {
                cnn.Dispose();
            }
            return nguoiDungDto;
        }

        public static int ThemNguoiDung(NguoiDungDTO nguoiDungDto)
        {
            OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi();
            string cmdText = "INSERT INTO Nguoi_Dung(TenNguoiDung, MatKhau, LaNguoiQuanLy) VALUES(?, ?, ?)";
            OleDbCommand cmd = new OleDbCommand(cmdText, cnn);

            cmd.Parameters.Add("@TenNguoiDung", OleDbType.VarChar);
            cmd.Parameters.Add("@MatKhau", OleDbType.VarChar);
            cmd.Parameters.Add("@LaNguoiQuanLy", OleDbType.Boolean);

            cmd.Parameters["@TenNguoiDung"].Value = nguoiDungDto.TenNguoiDung;
            cmd.Parameters["@MatKhau"].Value = nguoiDungDto.MatKhau;
            cmd.Parameters["@LaNguoiQuanLy"].Value = nguoiDungDto.LaNguoiQuanLy;

            cnn.Open();
            int result = 0;
            try
            {
                
                result = cmd.ExecuteNonQuery();
                cnn.Close();
                
            }
            catch
            {
            	if(cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
                throw new Exception("Tài khoản này đã tồn tại");
            }
            finally
            {
                cnn.Dispose();
            }

            return result;
        }

        public static int XoaNguoiDung(string tenNguoiDung)
        {
            OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi();
            string cmdText = String.Format("DELETE FROM Nguoi_Dung WHERE TenNguoiDung = '{0}'", tenNguoiDung);
            OleDbCommand cmd = new OleDbCommand(cmdText, cnn);

            cnn.Open();
            int result = 0;
            try
            {
                
                result = cmd.ExecuteNonQuery();
                cnn.Close();
                
            }
            catch
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
                throw new Exception("thao tác xóa người dùng bị lỗi");
            }
            finally
            {
                cnn.Dispose();
            }
            return result;
        }

        public static int SuaNguoiDung(NguoiDungDTO nguoiDungDto)
        {
            OleDbConnection cnn = BoKetNoiCSDL.TaoKetNoi();
            string cmdText = string.Format("UPDATE Nguoi_Dung SET MatKhau = '{0}' WHERE TenNguoiDung = '{1}'", nguoiDungDto.MatKhau, nguoiDungDto.TenNguoiDung);
            OleDbCommand cmd = new OleDbCommand(cmdText, cnn);

            cnn.Open();
            int result = 0;

            try
            {
                result = cmd.ExecuteNonQuery();
                cnn.Close();
                
            }
            catch
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
                throw new Exception("thao tác sửa mật khẩu người dùng bị lỗi");
            }
            finally
            {
                cnn.Dispose();
            }

            return result;
        }
    }
}
